Glavna zamisao bila je napraviti interaktivnu radionicu u R programskog jeziku da se prikaže spona ekonomije i programiranja kroz Data Science. Ekonomski temelj analize dolazi iz Urbane ekonomije koja se bavi analizom gradova, njihovom strukturom i performansama.
Ideja je bila analizirati ponudu nekretnina u Hrvatskoj. Podatke smo skinuli s https://besplatnioglasi.eu/nekretnine/. Fokus analize je bio na stanovima zbog vremenskog ograničenja analize, problematike heterogenosti kuća i zato što smo do ideje došli spontano, a trebalo je sve izrealizirati u četiri tjedna. Analizirali smo prosječnu cijenu kvadrata stana na području Hrvatske i Grada Zagreba, te prosječno odstupanje cijene. Zatim smo postavili hipotezu da li stan ima “početnu cijenu” kao nekretnina, te da li sadržaji poput parkinga, terase ili ako je stan blizu mora utječu na prosječnu cijenu kvadrata. Također smo napravili svojevrsnu procjenu “indexa cijena kvadrata” stana jer smo također izvukli datum oglasa stana.
U sljedećem dijelu nalazi se proces data scraping-a i priprema podataka za daljne analize. U odsječcima koda je prikazan ulazak i html kod stranice i prikupljanje željenih podataka. Zanimali su nas podatci poput naslova, cijene, kvadrature, broj soba, lokacije, datum oglašavanja i opis oglasa. Svakom stanu smo izračunali cijenu kvadrata i pridružili mu njegovu županiju. Kreirali smo csv tablicu s gore navedenim podatcima koju kasnije koristimo kao kostur za naše istraživanje.
library(rvest)
library(dplyr)
library(rgdal)
library(ggplot2)
library(sf)
library(stringr)
library(lubridate)
library(readr)
library(tm)
library(wordcloud)
library(cowplot)
library(stargazer)
library(knitr)
library(kableExtra)
##KO GOD BUDE STAVLJA SKREP ODE, NEZABORAVI OVAJ POCETNI FOLDER ISTO
folder = "/Users/Perica/Desktop/Karte"
#---------------------------------------------------------------SCRAPING DATA----------------------------------
# skidam podatke dok ima oglasa
i =0
while(TRUE){
i=i+1 #broj stranice
#kreiram link kao kombinaciju pocetka i broja stranice i učitavam ga u R
link1 = "https://besplatnioglasi.eu/nekretnine/stanovi?lang=hr&page="
broj = as.character(i);
LINK = paste(link1,broj,sep="",collapse=NULL)
page = read_html(LINK)
#---------------------------------------------------------------VADIM INFO SA STRANICE---------------------
# vektori s naslovom i cjenom
naslov = page %>% html_nodes(".titleLink") %>% html_text()
if(length(naslov)==0) break; # terministički uvjet
cijena = page %>% html_nodes(".actualValue") %>% html_text()
#vađenje 4 puta većeg vektora koji sadrži: kvadraturu,objekt,sobe,lokaciju
informacije = page %>% html_nodes(".dataHalfValue") %>% html_text()
#sad moram srediti informacije jer točno svaki 4. daje istu informaciju
kvadratura = subset(informacije,c(1:length(informacije))%%4 == 1)
objekt = subset(informacije,c(1:length(informacije))%%4 == 2)
sobe = subset(informacije,c(1:length(informacije))%%4 == 3)
lokacija = subset(informacije,c(1:length(informacije))%%4 == 0)
#---------------------------------------------------------------ULAZIM U SVAKI OGLAS I VADIM OPIS I DATUM---------------------
#1. preuzimam dio gdje su linkovi i spremam kao stringovi, 2. mičem prvih 10 slova,
#3. uzimam sve do razmaka, 4. skidam zadnje slovo
linkovi = page %>% html_nodes(".titleLink") %>% as.character()
linkovi=substring(linkovi, first=10, last = 1000000L)
linkovi=sub("\\ .*", "", linkovi)
linkovi=gsub('.{1}$', '', linkovi)
#definiram polje gdje ću spremati datume i opis
datumi=c()
opis=c()
#for petlja koja za svaki link uđe u stranicu oglasa
#nađe klasu koju tražim i da string koji sredim u datum (ili opis)
for(j in 1:length(linkovi))
{
pagezadatum=read_html(linkovi[j]) #učita string
datum = pagezadatum %>% html_nodes(".detailedTitleHolder") %>% html_text() #nađe element i da text
datum=sub("\\Šifra oglasa:.*", "", datum) #da sve do šifre oglasa
datum=gsub('.{3}$', '', datum) # izbriši zadnja 3 elementa
datum = substr(datum, nchar(datum)-9, nchar(datum)) #da zadnjih 9 elemenata
datumi = append(datumi,datum) #doda moj datum u listu datuma
opis1 = pagezadatum %>% html_nodes(".detailDataDescription") %>% html_text() #skupljm opis
opis = append(opis,opis1) #dodajem opis vektoru
}
#---------------------------------------------------------------SREĐIVANJE VARIJABLI---------------------
#prebacivanje datuma iz stringa u date(mjesec i godina)
datumi = strptime(datumi, format = "%d.%m.%Y")
datumi = as.Date(datumi) #datumi <- as.yearmon(datumi)
#uređivanje cijene (micanje eura..)
cijena = sub(".*~ ", "", cijena)
cijena = sub(" .*", "", cijena)
cijena = gsub("[[:punct:]]", "", cijena) #micanje točke iz cijene(272.345 -> 272345) zbog racunanja
cijena = as.numeric(cijena) #prebacivanje stringa u broj
#micanje m2 i prebacivanje stringa u broj
kvadratura = gsub('.{3}$', '', kvadratura)
kvadratura = as.numeric(kvadratura)
#definiranje cijene po kvadratu
kvadrat = cijena/kvadratura
kvadrat = round(kvadrat, 2)
#---------------------------------------------------------------KRAJ GLAVNOG FOR-A I SPJANJE PODATAKA---------------------
#ako vadim s prve stranice onda kreiram data.frame, a ako sa stranica iza onda ono što izvadim spajam s prijašnjim data.frame
if(i==1){podaci = data.frame(naslov,cijena,kvadratura ,objekt,sobe,lokacija,opis, kvadrat,datumi,stringsAsFactors = FALSE)}
else {podaci2 = data.frame(naslov,cijena,kvadratura ,objekt,sobe,lokacija,opis, kvadrat,datumi, stringsAsFactors = FALSE); podaci=rbind(podaci,podaci2);}
}
#---------------------------------------------POPRAVAK NAZIVA I GRUPIRANJE PO ŽUPANIJAMA---------------------------------------
# popravak oštećenih lokacija
old_values <- c("Mali Lošinj", "Kršan", "Varaždin", "Sukošan", "Trešnjevka - Sjever",
"PeÅ¡Ä\u0087enica - Žitnjak", "Gornji Grad - MedveÅ¡Ä\u008dak", "ViÅ¡kovo",
"Ä\u008crnomerec", "ReÅ¡etari", "Fažana", "PoreÄ\u008d", "Župa DubrovaÄ\u008dka",
"ZapreÅ¡iÄ\u0087", "TreÅ¡njevka - Jug", "BaÅ¡ka", "OmiÅ¡alj", "Ližnjan",
"Malinska-DubaÅ¡nica", "Podsused - VrapÄ\u008de", "Veliko TrgoviÅ¡Ä\u0087e", "Ä\u008cavle",
"Å\u00A0ibenik", "ViÅ¡njan", "PaÅ¡man", "Ä\u008cazma", "KaÅ¡tela", "Vinodolska OpÄ\u0087ina",
"Fužine", "TuÄ\u008depi", "OrebiÄ\u0087", "MarÄ\u008dana", "KaÅ¡telir-Labinci")
new_values <- c("Mali Lošinj", "Kršan", "Varaždin", "Sukošan", "Trešnjevka - Sjever",
"Pešćenica - Žitnjak", "Gornji Grad - Medveščak", "Viškovo",
"Črnomerec", "Rešetari", "Fažana", "Poreč", "Župa Dubrovačka",
"Zaprešić", "Trešnjevka - Jug", "Baška", "Omišalj", "Ližnjan",
"Malinska-Dubašnica", "Podsused - Vrapče", "Veliko Trgovišće", "Čavle",
"Šibenik", "Višnjan", "Pašman", "Čazma", "Kaštela", "Vinodolska Općina",
"Fužine", "Tučepi", "Orebić", "Marčana", "Kaštelir-Labinci")
replacer <- setNames(new_values, old_values)
podaci$lokacija <- str_replace_all(podaci$lokacija, replacer)
# svakom gradu pridružiti njegovu županiju
lookup_table <- data.frame(grad = c(
"Čačinci", "Čađavica", "Crnac", "Gradina", "Lukač", "Mikleuš", "Nova Bukovica", "Orahovica", "Pitomača", "Slatina", "Sopje", "Špišić Bukovica", "Suhopolje", "Virovitica", "Virovitica - Okolica", "Voćin", "Zdenci",
"Drnje", "Ferdinandovac", "Gola", "Gornja Rijeka", "Hlebine", "Kalinovac", "Kalnik", "Kloštar Podravski", "Koprivnica", "Koprivnica - Okolica", "Koprivnički Bregi", "Koprivnički Ivanec", "Križevci", "Legrad", "Molve", "Novigrad Podravski", "Novo Virje", "Peteranec", "Podravske Sesvete", "Rasinja", "Sokolovac", "Sveti Ivan Žabno", "Sveti Petar Orehovec", "Virje", "Đelekovac", "Đurđevac",
"Antunovac", "Beli Manastir", "Belišće", "Bilje", "Bizovac", "Čeminac", "Čepin", "Darda", "Donja Motičina", "Donji Miholjac", "Draž", "Drenje", "Erdut", "Ernestinovo", "Feričanci", "Gorjani", "Jagodnjak", "Kneževi Vinogradi", "Koška", "Levanjska Varoš", "Magadenovac", "Marijanci", "Našice", "Osijek", "Osijek - Okolica", "Petlovac", "Petrijevci", "Podgorač", "Podravska Moslavina", "Popovac", "Punitovci", "Satnica Đakovačka", "Semeljci", "Šodolovci", "Strizivojna", "Trnava", "Valpovo", "Viljevo", "Viškovci", "Vladislavci", "Vuka", "Đakovo", "Đurđenovac",
"Bale", "Barban", "Brtonigla", "Buje", "Buzet", "Cerovlje", "Fažana", "Gračišće", "Grožnjan", "Kanfanar", "Karojba", "Kaštelir-Labinci", "Kršan", "Labin", "Lanišće", "Ližnjan", "Lupoglav", "Marčana", "Medulin", "Motovun", "Novigrad", "Oprtalj", "Pazin", "Pazin - Okolica", "Pićan", "Poreč", "Pula", "Raša", "Rovinj", "Sveta Nedelja", "Sveti Lovreč", "Sveti Petar U Šumi", "Svetvinčenat", "Tar-Vabriga", "Tinjan", "Umag", "Višnjan", "Vižinada", "Vodnjan", "Vrsar", "Žminj",
"Blato", "Dubrovačko Primorje", "Dubrovnik", "Dubrovnik - Okolica", "Janjina", "Konavle", "Korčula", "Kula Norinska", "Lastovo", "Lumbarda", "Metković", "Mljet", "Opuzen", "Orebić", "Ploče", "Pojezerje", "Slivno", "Smokvica", "Ston", "Trpanj", "Vela Luka", "Zažablje", "Župa Dubrovačka",
"Donji Kukuruzari", "Dvor", "Glina", "Gvozd", "Hrvatska Dubica", "Hrvatska Kostajnica", "Jasenovac", "Kutina", "Lekenik", "Lipovljani", "Majur", "Martinska Ves", "Novska", "Petrinja", "Popovača", "Sisak", "Sisak - Okolica", "Sunja", "Topusko", "Velika Ludina",
"Bebrina", "Brodski Stupnik", "Bukovlje", "Cernik", "Davor", "Donji Andrijevci", "Dragalić", "Garčin", "Gornja Vrba", "Gornji Bogićevci", "Gundinci", "Klakar", "Nova Gradiška", "Nova Kapela", "Okučani", "Oprisavci", "Oriovac", "Podcrkavlje", "Rešetari", "Sibinj", "Sikirevci", "Slavonski Brod", "Slavonski Brod - Okolica", "Slavonski Šamac", "Stara Gradiš¡ka", "Staro Petrovo Selo", "Velika Kopanica", "Vrbje", "Vrpolje",
"Barilović", "Bosiljevo", "Cetingrad", "Draganić", "Duga Resa", "Generalski Stol", "Josipdol", "Karlovac", "Karlovac - Okolica", "Krnjak", "Lasinja", "Netretić", "Ogulin", "Ozalj", "Plaški", "Rakovica", "Ribnik", "Saborsko", "Slunj", "Tounj", "Vojnić", "Žakanje",
"Benkovac", "Bibinje", "Biograd Na Moru", "Galovac", "Gračac", "Jasenice", "Kali", "Kukljica", "Lišane Ostrovičke", "Nin", "Obrovac", "Pag", "Pakoštane", "Pašman", "Polača", "Poličnik", "Posedarje", "Povljana", "Ugljan", "Ražanac", "Sali", "Škabrnja", "Stankovci", "Starigrad", "Sukošan", "Sveti Filip i Jakov", "Tkon", "Vir", "Zadar", "Zadar - Okolica", "Zemunik Donji", "Vrsi", "Privlaka (ZD)", "Novigrad (ZD)",
"Andrijaševci", "Babina Greda", "Bogdanovci", "Borovo", "Bošnjaci", "Cerna", "Drenovci", "Gradište", "Gunja", "Ilok", "Ivankovo", "Jarmina", "Lovas", "Markušica", "Negoslavci", "Nijemci", "Nuštar", "Privlaka", "Stari Jankovci", "Stari Mikanovci", "Tompojevci", "Tordinci", "Tovarnik", "Trpinja", "Vinkovci", "Vinkovci - Okolica", "Voćinci", "Vrbanja", "Vukovar", "Vukovar - Okolica", "Županja", "Otok (VU)",
"Baška Voda", "Bol", "Brela", "Cista Provo", "Dicmo", "Dugi Rat", "Dugopolje", "Gradac", "Hrvace", "Hvar", "Imotski", "Jelsa", "Kaštela", "Klis", "Komiža", "Lećevica", "Lokvičići", "Lovreč", "Makarska", "Marina", "Milna", "Muć", "Nerežišća", "Okrug", "Omiš", "Otok", "Podbablje", "Podgora", "Podstrana", "Postira", "Prgomet", "Primorski Dolac", "Proložac", "Pučišća", "Runovići", "Seget", "Selca", "Šestanovac", "Sinj", "Solin", "Solin - Okolica", "Šolta", "Split", "Split - Okolica", "Stari Grad", "Sućuraj", "Supetar", "Sutivan", "Trilj", "Trogir", "Trogir - Okolica", "Tučepi", "Vis", "Vrgorac", "Vrlika", "Zadvarje", "Zagvozd", "Zmijavci",
"Bednja", "Beretinec", "Breznica", "Breznički Hum", "Cestica", "Donja Voća", "Donji Martijanec", "Gornji Kneginec", "Ivanec", "Jalžabet", "Klenovnik", "Lepoglava", "Ljubešćica", "Ludbreg", "Mali Bukovec", "Maruševec", "Novi Marof", "Petrijanec", "Sračinec", "Sveti Ilija", "Sveti Đurđ", "Trnovec Bartolovečki", "Varaždin", "Varaždin - Okolica", "Varaždinske Toplice", "Veliki Bukovec", "Vidovec", "Vinica", "Visoko",
"Bedekovčina", "Budinščina", "Desinić", "Donja Stubica", "Gornja Stubica", "Hrašćina", "Hum Na Sutli", "Jesenje", "Klanjec", "Konjščina", "Kraljevec Na Sutli", "Krapina", "Krapina - Okolica", "Krapinske Toplice", "Kumrovec", "Lobor", "Mače", "Marija Bistrica", "Mihovljan", "Novi Golubovec", "Oroslavje", "Petrovsko", "Pregrada", "Radoboj", "Stubičke Toplice", "Sveti Križ Začretje", "Tuhelj", "Veliko Trgovišće", "Zabok", "Zagorska Sela", "Zlatar", "Zlatar-Bistrica", "Đurmanec",
"Bedenica", "Bistra", "Brckovljani", "Brdovec", "Dubrava", "Dubravica", "Dugo Selo", "Dugo Selo - Okolica", "Farkaševac", "Gradec", "Ivanić-Grad", "Ivanić-Grad - Okolica", "Jakovlje", "Jastrebarsko", "Jastrebarsko - Okolica", "Klinča Sela", "Kloštar Ivanić", "Krašić", "Kravarsko", "Križ", "Luka", "Marija Gorica", "Orle", "Pisarovina", "Pokupsko", "Preseka", "Pušća", "Rakovec", "Rugvica", "Samobor", "Samobor - Okolica", "Stupnik", "Sveti Ivan Zelina", "Velika Gorica", "Velika Gorica - Okolica", "Vrbovec", "Zaprešić", "Zaprešić - Okolica", "Žumberak", "Sveta Nedjelja",
"Bakar", "Baška", "Brod Moravice", "Čabar", "Čavle", "Cres", "Crikvenica", "Delnice", "Dobrinj", "Fužine", "Jelenje", "Kastav", "Klana", "Kostrena", "Kraljevica", "Krk", "Lokve", "Lovran", "Mali Lošinj", "Malinska-Dubašnica", "Matulji", "Mošćenička Draga", "Mrkopalj", "Novi Vinodolski", "Omišalj", "Opatija", "Opatija - Okolica", "Punat", "Rab", "Ravna Gora", "Rijeka", "Skrad", "Vinodolska Općina", "Viškovo", "Vrbnik", "Vrbovsko",
"Biskupija", "Civljane", "Drniš", "Ervenik", "Kijevo", "Kistanje", "Knin", "Murter", "Pirovac", "Primošten", "Promina", "Rogoznica", "Ružić", "Šibenik", "Šibenik - Okolica", "Skradin", "Tisno", "Unešić", "Vodice",
"Brinje", "Donji Lapac", "Gospić", "Gospić - Okolica", "Karlobag", "Lovinac", "Novalja", "Otočac", "Perušić", "Plitvička Jezera", "Senj", "Udbina", "Vrhovine",
"Berek", "Bjelovar", "Bjelovar - Okolica", "Čazma", "Daruvar", "Dežanovac", "Gareš¡nica", "Grubišno Polje", "Hercegovac", "Ivanska", "Kapela", "Končanica", "Nova Rača", "Rovišće", "Šandrovac", "Severin", "Sirač", "Štefanje", "Velika Pisanica", "Velika Trnovitica", "Veliki Grđevac", "Veliko Trojstvo", "Zrinski Topolovac", "Đulovac",
"Brezovica", "Črnomerec", "Donja Dubrava", "Donji Grad", "Gornja Dubrava", "Gornji Grad - Medveščak", "Maksimir", "Novi Zagreb - Istok", "Novi Zagreb - Zapad", "Pešćenica - Žitnjak", "Podsljeme", "Podsused - Vrapče", "Sesvete", "Stenjevec", "Trešnjevka - Jug", "Trešnjevka - Sjever", "Trnje", "Zagreb - Okolica",
"Belica", "Čakovec", "Čakovec - Okolica", "Dekanovec", "Domašinec", "Donji Kraljevec", "Donji Vidovec", "Goričan", "Gornji Mihaljevec", "Kotoriba", "Mala Subotica", "Mursko Središće", "Nedelišće", "Orehovica", "Podturen", "Prelog", "Pribislavec", "Selnica", "Šenkovec", "Strahoninec", "Štrigova", "Sveta Marija", "Sveti Juraj Na Bregu", "Sveti Martin Na Muri", "Vratišinec",
"Brestovac", "Čaglin", "Jakšić", "Kaptol", "Kutjevo", "Lipik", "Pakrac", "Pleternica", "Požega", "Požega - Okolica", "Velika"
),
županija = c(
rep("Virovitičko-podravska", 17),
rep("Koprivničko-križevačka", 26),
rep("Osječko-baranjska", 43),
rep("Istarska", 41),
rep("Dubrovačko-neretvanska", 23),
rep("Sisačko-moslovačka", 20),
rep("Brodsko-posavska", 29),
rep("Karlovačka", 22),
rep("Zadarska", 34),
rep("Vukovarsko-srijemska", 32),
rep("Splitsko-dalmatinska", 58),
rep("Varaždinska", 29),
rep("Krapinsko-zagorska", 33),
rep("Zagrebačka", 40),
rep("Primorsko-goranska", 36),
rep("Šibensko-kninska", 19),
rep("Ličko-senjska", 13),
rep("Bjelovarsko-bilogorska", 24),
rep("Grad Zagreb", 18),
rep("Međimurska", 25),
rep("Požeško-slavonska", 11)
))
# dodamo stupac sa županijama
podaci <- merge(podaci, lookup_table, by.x = "lokacija", by.y = "grad")
#---------------------------------------------------------------ČIŠĆENJE + BRISANJE VARIJABLI---------------------
#učitavanje i sređivanje podataka
podaci = subset(podaci,podaci$kvadratura>15) #mičem nekretnine manje od 15 kvadrata
podaci = subset(podaci,podaci$kvadrat<13000) #mičem skuplje od 13k€
podaci = subset(podaci,podaci$kvadratura<1000) #mičem veće od 1000 kvadrata
podaci = subset(podaci, kvadrat > 500) #mičem jeftinije od 500€ po kvadratu
#brišemo koji nam više ne trebaju
rm(broj); rm(cijena); rm(datum); rm(datumi); rm(i); rm(informacije); rm(j); rm(kvadrat); rm(kvadratura); rm(LINK); rm(link1); rm(linkovi); rm(lokacija);
rm(naslov); rm(new_values); rm(objekt); rm(old_values); rm(opis); rm(opis1); rm(replacer); rm(sobe); rm(lookup_table); rm(page); rm(pagezadatum); rm(podaci2);
#prikaz tablice koju smo dobili skrepanjem
kable(podaci[c(1,2,4,5),],align = 'l',format = "html") %>%
kable_styling(full_width = FALSE, latex_options = c('hold_position', 'striped'),
position = "center", font_size = 12)
| lokacija | naslov | cijena | kvadratura | objekt | sobe | opis | kvadrat | datumi | županija | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Bakar | Stan Bakar 1S+DB - 66m2, stan s terasom i potkrovljem | 100000 | 66.00 | U stambenoj zgradi | 1s-1s+DB | Prodaje se stan u Bakru površine 66 m2.Stan se nalazi na prvom katu, sastoji se od kuhinje, kupaonice, dnevnog boravka, spavaće sobe,terase i potkrovlja.Terasa je zbog svoje prostranosti i orijentacije (izolirana od pogleda s ulice a otvorena pogledom prema zelenim površinama), dobra strana ovog stana. Stan zahtijeva renovaciju. Velika prednost ove nekretnine je mnoštvo mogućnosti prenamjene postojećeg rasporeda i proširenje na pripadajuće potkrovlje čime bi se dobila veća kvadratura stambene površine.Stan s mnogo potencijala.Poštovani klijenti, agencijska provizija naplaćuje se u skladu s Općim uvjetima poslovanjawww.dux-nekretnine.hr/opci-uvjeti-poslovanjaID KOD AGENCIJE: 963Tomislav TomišaAgent s licencomMob: +385 95 199 2696Tel: +385 51 518 174E-mail: [email protected]www.dux-nekretnine.hr | 1515.15 | 2022-11-14 | Primorsko-goranska |
| 2 | Bakar | Hreljin - stan na 1. katu, 58 m2 | 130000 | 58.00 | U stambenoj zgradi | 2s-2s+DB | Hreljin - A4 Dvosoban stan na 1. katu (2s+db) 58m2. Lođa kao nastavak dnevnog boravka.Stanovi se prodaju u fazi dovršenosti “KLJUČ U RUKE”. To podrazumijeva završen okoliš te sve zajedničke dijelove zgrade.Stanovi imaju predviđeno KLIMU, PODNO GRIJANJE, te imaju dimnjak.Pvc stolarija sa roletama, PROTUPROVALNA ulazna vrata u stanove, TALIJANSKA SOBNA VRATA, KERAMIKA+LAMINAT ZA PODNO GRIJANJE, WALK IN TUŠ, TE 1.KLASA SANITARIJE.Fasada je stiropor, 10cm Baumit sustav.Svakom stanu je osigurano jedno parkirno mjesto.Završetak radova je proljeće 2023.Hreljin je malo mjesto smješteno na 307m nadmorske visine. u njemu postoji pošta, škola, vrtić, trgovina, ljekarna, kao i razne uslužne djelatnosti. Sa svojom izvrsnom prometnom povezanošću, Hreljin je postao traženo mjesto za život. Zbog spoja na brzu cestu, Crikvenička rivijera, i otok Krk su nadohvat ruke, a udaljen je samo 10-ak minuta vožnje do centra Rijeke. Grad Bakar je na tri minute vožnje, kao i industrijska zona Kukuljanovo. Ovaj projekt je zamišljen kao prilika za one koji žele uživati u čarima življenja izvan gradske gužve, dalje od stresa, gradske užurbanosti, a opet blizu svim uslugama, koje su nam potrebne u svakodnevnom životu.Također je odlična lokacija za investiciju u nekretninu, a u svrhu iznajmljivanja; zbog svoje prometne povezanosti i same blizine industrijske zone Kukuljanovo, stalna je potreba za smještajem radnika, kao obitelji i samaca. To jamči brzinu povrata uloženog novca u kupnju stana kroz iznajmljivanje.Za sve ostale informacije, cijene, dinamiku plaćanja, kao i za sva dodatna pitanja, obratite nam se s povjerenjem.****ID KOD AGENCIJE: 570-9949Koraljka BarbirAgent godineMob: +385 92 16 80 142Tel: +385 51 33 20 07E-mail: [email protected]www.opatijanekretnine.hrCijenjeni potencijalni najmoprimci, zakupoprimci i kupci: Razgled nekretnine moguć je isključivo uz potpis Ugovora o posredovanju, u svrhu zaštite vlasnika nekretnine od posjeta neregistriranih osoba, a u skladu sa Zakonom o zaštiti podataka i Zakonom o posredovanju u prometu nekretnina. Agencijska provizija za najmoprimca/zakupnika iznosi jednu mjesečnu najamninu/zakupninu + PDV. Agencijska provizija za kupca iznosi 3%+PDV-e od ukupno dogovorene kupoprodajne cijene. U slučaju da ste za navedenu nekretninu negdje naišli na nižu cijenu, ista vrijedi i kod nas. Pri svakom razgledavanju nekretnine potencijalni kupac/najmoprimatelj je obavezan ispuniti Ugovor o posredovanju u kojem su navedeni: - osnovni podaci o nekretnini - osnovni podaci o potencijalnom kupcu/najmoprimatelju - osnovni podaci o agenciji - iznos agencijske provizije | 2241.38 | 2022-11-14 | Primorsko-goranska |
| 4 | Bakar | Bakar, 90m2, 4-sobni stan s db na samoj rivi | 156000 | 90.00 | U stambenoj zgradi | 3s-3s+DB | U centru Bakra na samoj rivi smještena je ova nekretnina od 90m2 s pogledom na more. Sastoji se od kuhinje s blagovaonicom, dnevnog boravka, tri veće i jedne manje sobe, hodnika, kupaonice te pripadajućeg tavanskog prostora od 75m2 s mogućnošću uređenja u dodatnu manju stambenu jedinicu i dodatnog pomoćnog toaleta. ID KOD AGENCIJE: 23840Željko KalinčevićDirektorMob: +385 91 205 0962Tel: 051 322 376Fax: 051 311 059E-mail: [email protected]http://millennium-nekretnine.hr | 1733.33 | 2022-11-14 | Primorsko-goranska |
| 5 | Bakar | Hreljin, novogradnja, 2s+db | 122000 | 59.93 | U stambenoj zgradi | 2s-2s+DB | U ponudi je novogradnja koja je prilika za one koji žele uživati u čarima življenja izvan gradske gužve, daleko od stresa i gradske užurbanosti, a opet u blizini svih sadržaja i usluga koji su neophodni u svakodnevnom životu.Sastoji se od dvije zgrade s ukupno 8 stanova. Stanovi se prodaju kompletno uređeni, tzv. princip “ključ u ruke”, a predviđeni završetak radova je krajem 2022. godine. Stanovima u prizemlju (1s+db, 2s+db) pripada dio vrta ispred stana koji će svojim korisnicima pružiti sve blagodati življenja u stanu s vrtom, odnosno terasom ispred stana.Na prvom katu stanovi (1s+db i 2s+db) imaju lijep balkon ili loggiu kao nastavak dnevnog boravka.Stanovi imaju predviđeno podno grijanje te klima uređaje.Fasada je stiropor debljine 10 cm Baumit sustav, stolarija je PVC s roletama.Svaki stan ima osigurano jedno parkirno mjesto.Dobra uređenost Hreljina u smislu prisutnosti raznih sadržaja ( škola, vrtić, trgovina, ljekarna…) i izvrsna prometna povezanost s Rijekom, Crikveničkom rivijerom i otokom Krk, čine ga traženim mjestom za život.ID KOD AGENCIJE: 32518Millennium nekretnine exclusive d.o.o.Mob: +385 91 322 3760Tel: +385 51 322 376Fax: 051 311 059E-mail: [email protected]http://millennium-nekretnine.hr | 2035.71 | 2022-09-21 | Primorsko-goranska |
# sve županije
žup_cro <- data.frame(
županija = c(
"Virovitičko-podravska",
"Koprivničko-križevačka",
"Osječko-baranjska",
"Istarska",
"Dubrovačko-neretvanska",
"Sisačko-moslovačka",
"Brodsko-posavska",
"Karlovačka",
"Zadarska",
"Vukovarsko-srijemska",
"Splitsko-dalmatinska",
"Varaždinska",
"Krapinsko-zagorska",
"Zagrebačka",
"Primorsko-goranska",
"Šibensko-kninska",
"Ličko-senjska",
"Bjelovarsko-bilogorska",
"Grad Zagreb",
"Međimurska",
"Požeško-slavonska"
)
)
# prosječni kvadrat po županiji
avg_cro <- aggregate(kvadrat ~ županija, data = podaci, FUN = mean)
# standardna devijacija
sd_cro <- aggregate(kvadrat ~ županija, data = podaci, FUN = sd)
# koeficijent varijacije po županiji
cv_cro <-
data.frame(županija = avg_cro$županija,
cv = sd_cro$kvadrat / avg_cro$kvadrat)
# broj oglasa po županiji
cnt_cro <-
aggregate(lokacija ~ županija, data = podaci, FUN = length)
# spajanje gore navedenih podataka
cro_data <-
merge(merge(avg_cro, cv_cro, by = "županija"), cnt_cro, by = "županija")
cro_data <-
merge(žup_cro, cro_data, by = "županija", all.x = TRUE)
names(cro_data) <-
c("županija", "avgKvadrata", "koefVarKvadrata", "brojOglasa")
kable(cro_data) %>%
kable_styling(full_width = FALSE, latex_options = c('hold_position', 'striped'),
position = "center", font_size = 12)
| županija | avgKvadrata | koefVarKvadrata | brojOglasa |
|---|---|---|---|
| Bjelovarsko-bilogorska | 1106.945 | 0.1647883 | 4 |
| Brodsko-posavska | 1501.212 | 0.3526608 | 40 |
| Dubrovačko-neretvanska | 3484.280 | 0.3857475 | 49 |
| Grad Zagreb | 2799.509 | 0.2730213 | 1566 |
| Istarska | 3211.686 | 0.3448460 | 2097 |
| Karlovačka | 1486.813 | 0.3862668 | 3 |
| Koprivničko-križevačka | NA | NA | NA |
| Krapinsko-zagorska | 1666.701 | 0.2275210 | 8 |
| Ličko-senjska | 2951.229 | 0.3264797 | 60 |
| Međimurska | 1593.333 | 0.1050826 | 3 |
| Osječko-baranjska | 1559.107 | 0.3000016 | 11 |
| Požeško-slavonska | 2923.640 | NA | 1 |
| Primorsko-goranska | 2826.790 | 0.4699109 | 4583 |
| Šibensko-kninska | 2968.267 | 0.2733339 | 427 |
| Sisačko-moslovačka | 2582.590 | 0.0160993 | 2 |
| Splitsko-dalmatinska | 3156.766 | 0.3161149 | 250 |
| Varaždinska | 1948.274 | 0.2116252 | 18 |
| Virovitičko-podravska | NA | NA | NA |
| Vukovarsko-srijemska | 2899.750 | NA | 1 |
| Zadarska | 3235.038 | 0.3521890 | 551 |
| Zagrebačka | 2220.450 | 0.2394800 | 109 |
Vizualizacija podataka je snažan alat koji nam omogućuje da složene informacije predstavimo na jasan i razumljiv način. Uz pomoć vizualnih prikaza, možemo lako identificirati obrasce i anomalije koje bi bile teže primijetiti u tabličnim prikazima. Ovakva vrsta prikaza je često lakša za razumijevanje široj publici, jer nije potrebno specifično akademsko znanje da bi se mogla interpretirati.
# županije sortirane silazno po broju oglasa
cro_data_sorted <- cro_data[order(-cro_data$brojOglasa),]
# top x županija po broju oglasa
x <- 5
top_x_zupanija <- data.frame(županija = cro_data_sorted$županija[1:x],
brojOglasa = cro_data_sorted$brojOglasa[1:x])
# ostale županije i zbroj njihovih oglasa
ostali_brojOglasa <- sum(cro_data_sorted$brojOglasa[x:length(cro_data_sorted$brojOglasa)], na.rm = TRUE)
ostali_zupanija <- data.frame(županija = "Ostali", brojOglasa = ostali_brojOglasa)
# spajanje u jednu tablicu
top_x_ostali <- rbind(top_x_zupanija, ostali_zupanija)
# brojevi oglasa -> postotak
piepercent <- round(100*top_x_ostali$brojOglasa/sum(top_x_ostali$brojOglasa), 1)
piepercent[length(piepercent)] <- round(100 - sum(piepercent[-length(piepercent)]), 1)
# kružni dijagram
pie(piepercent,
labels = paste(top_x_ostali$županija, paste0(piepercent, "%")),
main = "Kružni dijagram",
col = rainbow(length(top_x_ostali$brojOglasa)))
Violinski dijagram je vizualni prikaz raspodjele podataka koji omogućuje brzo i jednostavno razumijevanje njihove distribucije. Osnovna komponenta dijagrama je “violinski” oblik, gdje širina predstavlja gustoću podataka na y-osi. Linija koja se proteže okomito prikazuje raspon najmanje i najveće vrijednosti, dok se outlieri prikazuju točkama izvan “violinskih” oblika. Kutija unutar violinskih oblika označava interkvartilni raspon (IQR), a crta unutar kutije označava medijan.
# sve županije
all_zupanije <- unique(cro_data_sorted$županija)
# županije koje nisu u top_x_zupanija i zamijeni ih s 'Ostali'
ostale_zupanije <- setdiff(all_zupanije, top_x_zupanija$županija)
podaci_renamed <-
within(podaci, županija[županija %in% ostale_zupanije] <-
'Ostali')
# željeni poredak
podaci_renamed$županija <-
factor(podaci_renamed$županija, levels = top_x_ostali$županija)
# violinski dijagram
ggplot(data = podaci_renamed, aes(x = županija, y = kvadrat, color = županija)) +
geom_violin() +
labs(title = "Violinski dijagram",
x = "Županija",
y = "Kvadratura") +
geom_boxplot(width = 0.1) +
guides(color = "none")
# karta
cro_map <-
readOGR(folder, "Croatia_map")
# spajanje prijašnjih podataka s kartom
cro_data_map <-
merge(
cro_map,
cro_data,
by.x = "County",
by.y = "županija",
all.x = TRUE
)
# pogodniji format
cro_data_map <- st_as_sf(cro_data_map)
# prosječna cijena po kvadratu (Hrvatska)
ggplot(cro_data_map) +
geom_sf(aes(fill = round(avgKvadrata, 2)),
color = "gray",
lwd = 1) +
scale_fill_gradient(
low = "#efedf5",
high = "#3f007d",
# raspon boja županija
# opcionalno za boju onih bez podataka ide: na.value = "boja"
breaks = c(1000, 1650, 2250, 2850, 3500),
limits = c(1000, 3500)
) +
theme_void() + # makne rešetke preko karte
labs(title = "Prosječna cijena po kvadratu u Hrvatskoj",
fill = "Cijena po metru kvadratnom (€)",
caption = "Zelene županije - značajna količina podataka\n
Crne županije - manja količina podataka") +
geom_sf_label(
aes(label = ifelse(
is.na(avgKvadrata) |
is.null(avgKvadrata),
County, # ako nema podataka, onda samo ime županije
paste0(County, "\n", "€", sprintf("%.2f", round(avgKvadrata, 2)))
)),
size = 2.5,
fontface = "bold",
color = ifelse(
cro_data_map$brojOglasa < 40 |
is.na(cro_data_map$brojOglasa) |
is.null(cro_data_map$brojOglasa),
"black",
"darkgreen"
), # zeleni imaju značajno podataka, crni ne
fill = "#F2F3F4",
label.padding = unit(0.065, "lines"),
label.r = unit(0.2, "lines"),
label.size = 0,
alpha = 0.5,
fill.alpha = 0.5, color.alpha = 1
) +
theme(plot.title = element_text(size = 30, face = "bold"),
plot.caption = element_text(size = 14))
# koeficijent varijacije kvadrature (Hrvatska)
ggplot(cro_data_map) +
geom_sf(aes(fill = round(koefVarKvadrata * 100, 2)),
color = "gray",
lwd = 1) +
scale_fill_gradient(
low = "#deebf7",
high = "#08306b",
breaks = c(0, 10, 20, 30, 40, 50),
limits = c(0, 50)
) +
theme_void() +
labs(title = "Koeficijent varijacije cijene kvadrata u Hrvatskoj",
fill = "Koeficijent varijacije (%)",
caption = "Zelene županije - značajna količina podataka\nCrne županije - manja količina podataka") +
geom_sf_label(
aes(label = ifelse(
is.na(koefVarKvadrata) |
is.null(koefVarKvadrata) ,
County,
paste0(County, "\n", sprintf("%.2f", round(koefVarKvadrata, 4) * 100), "%")
)),
size = 2.5,
fontface = "bold",
color = ifelse(
cro_data_map$brojOglasa < 40 |
is.na(cro_data_map$brojOglasa) |
is.null(cro_data_map$brojOglasa),
"black",
"darkgreen"
),
fill = "#F2F3F4",
label.padding = unit(0.065, "lines"),
label.r = unit(0.2, "lines"),
label.size = 0,
alpha = 0.5,
fill.alpha = 0.5, color.alpha = 1
) +
theme(plot.title = element_text(size = 30, face = "bold"),
plot.caption = element_text(size = 14))
# svi kvartovi
kvart_zg <-
data.frame(
lokacija = c(
"Brezovica",
"Črnomerec",
"Donja Dubrava",
"Donji Grad",
"Gornja Dubrava",
"Gornji Grad - Medveščak",
"Maksimir",
"Novi Zagreb - Istok",
"Novi Zagreb - Zapad",
"Pešćenica - Žitnjak",
"Podsljeme",
"Podsused - Vrapče",
"Sesvete",
"Stenjevec",
"Trešnjevka - Jug",
"Trešnjevka - Sjever",
"Trnje",
"Zagreb - Okolica"
)
)
# izdvojimo kvartove
zg_data <-
subset(podaci,
županija == "Grad Zagreb",
select = c("lokacija", "kvadrat"))
# prosječni kvadrat po kvartovima
avg_zg <- aggregate(kvadrat ~ lokacija, data = zg_data, FUN = mean)
# standardna devijacija
sd_zg <- aggregate(kvadrat ~ lokacija, data = zg_data, FUN = sd)
# koeficijent varijacije po kvartovima
cv_zg <-
data.frame(lokacija = avg_zg$lokacija,
cv = sd_zg$kvadrat / avg_zg$kvadrat)
# broj oglasa po kvartovima
cnt_zg <-
aggregate(kvadrat ~ lokacija, data = zg_data, FUN = length)
# spajanje gore navedenih podataka
zg_data <-
merge(merge(avg_zg, cv_zg, by = "lokacija"), cnt_zg, by = "lokacija")
zg_data <-
merge(kvart_zg, zg_data, by = "lokacija", all.x = TRUE)
names(zg_data) <-
c("lokacija", "avgKvadrata", "koefVarKvadrata", "brojOglasa") #stupce preimenovat
# karta
zg_map <-
readOGR(folder, "Zagreb_map")
# spajanje prijašnjih podataka s kartom
zg_data_map <-
merge(zg_map,
zg_data,
by.x = "District",
by.y = "lokacija",
all.x = TRUE)
# pogodniji format
zg_data_map <- st_as_sf(zg_data_map)
# prosječna cijena po kvadratu (Zagreb)
ggplot(zg_data_map) +
geom_sf(aes(fill = round(avgKvadrata, 2)),
color = "gray",
lwd = 1) +
scale_fill_gradient(
low = "#fcfbfd",
high = "#3f007d",
#raspon boja kvartova
breaks = c(2000, 2500, 3000, 3500),
limits = c(2000, 3500)
) +
theme_void() + #tema da nema rešetki priko karte
labs(title = "Prosječna cijena po kvadratu u Zagrebu",
fill = "Cijena po metru kvadratnom (€)",
caption = "Zeleni kvartovi - značajna količina podataka\nCrni kvartovi - manja količina podataka") +
geom_sf_label(
aes(label = ifelse(
is.na(avgKvadrata) |
is.null(avgKvadrata),
District,
paste0(District, "\n", "€", sprintf("%.2f", round(avgKvadrata, 2)))
)),
#ako nema podataka, onda samo ime županije
size = 2.5,
#za tekst kvartova je sve dalje
fontface = "bold",
color = ifelse(
zg_data_map$brojOglasa < 80 |
is.na(zg_data_map$brojOglasa) |
is.null(zg_data_map$brojOglasa),
"black",
"darkgreen"
),
fill = "#F2F3F4",
label.padding = unit(0.065, "lines"),
label.r = unit(0.2, "lines"),
label.size = 0,
alpha = 0.5,
fill.alpha = 0.5, color.alpha = 1
) +
theme(plot.title = element_text(size = 30, face = "bold"),
plot.caption = element_text(size = 14))
# koeficijent varijacije kvadrature (Zagreb)
ggplot(zg_data_map) +
geom_sf(aes(fill = round(koefVarKvadrata * 100, 2)),
color = "gray",
lwd = 1) +
scale_fill_gradient(
low = "#deebf7",
high = "#08306b",
breaks = c(0, 10, 20, 30, 40),
limits = c(0, 40)
) +
theme_void() +
labs(title = "Koeficijent varijacije cijene kvadrata u Zagrebu",
fill = "Koeficijent varijacije (%)",
caption = "Zeleni kvartovi - značajna količina podataka\n
Crni kvartovi - manja količina podataka") +
geom_sf_label(
aes(label = ifelse(
is.na(koefVarKvadrata) |
is.null(koefVarKvadrata),
District,
paste0(District, "\n", sprintf("%.2f", round(koefVarKvadrata, 4) * 100), "%")
)),
size = 2.5,
fontface = "bold",
color = ifelse(
zg_data_map$brojOglasa < 80 |
is.na(zg_data_map$brojOglasa) |
is.null(zg_data_map$brojOglasa),
"black",
"darkgreen"
),
fill = "#F2F3F4",
label.padding = unit(0.065, "lines"),
label.r = unit(0.2, "lines"),
label.size = 0,
alpha = 0.5,
fill.alpha = 0.5, color.alpha = 1
) +
theme(plot.title = element_text(size = 30, face = "bold"),
plot.caption = element_text(size = 14))
U ovom odjeljku je demonstriran klasičan primjer linearne regresije. Motivacija za linearnu regresiju kao i za mnoge druge ekonomske modele je “zdrava logika” koja se poslije pokušava potkrijepiti rezultatima i statističkim testovima.
Oko linearnosti modela nije bilo nikakvih neslaganja unutar ekipe jer svi imamo taj “osjećaj” da svaki dodatni kvadrat stana jednako poveća cijenu, no što se tiče signifikantnosti slobodnog regresijskog parametra tu smo se našli u neslaganju. Laićki rečeno pitanje je: “ima li stan nekakvu početnu vrijednost na koju se dodaje umnožak broja kvadrata i cijene kvadrata ?”
### graf cijenje i kvadrature svih oglasa (kontrolni graf) ###
p3<-ggplot(podaci, aes(y = cijena, x = kvadratura )) +
geom_point(shape=18, color="deepskyblue3")+
geom_smooth(method=lm, se=FALSE,
color="black") +
coord_cartesian(ylim = c(20000, 250000),
xlim = c(15,120), expand = FALSE) +
ylab("Cijena stana") +
xlab("Kvadratura") +
ggtitle("Cijena po m2") +
theme(axis.text = element_text(size = 16),
axis.title = element_text(size = 20, face = "bold"),
axis.title.y = element_text(margin = margin(t = 0, r = 20, b = 0, l = 0)),
axis.title.x = element_text(margin = margin(t = 20, r = 0, b = 0, l = 0)),
plot.title = element_text(size = 30, face = "bold", hjust = 0.5,
margin = margin(t = 0, r = 0, b = 20, l = 0)),
strip.background = element_rect(colour = "black", fill = "white"),
strip.text = element_text(face = "bold", size = 16))
p3 #prikaz grafa
model <- lm(cijena ~ kvadratura, data = podaci) #definiram regresiju
summary(model) #prikaz koeficjenata
##
## Call:
## lm(formula = cijena ~ kvadratura, data = podaci)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1119683 -59463 -15186 33362 1713604
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5271.88 3104.00 1.698 0.0895 .
## kvadratura 2856.30 32.88 86.872 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 131600 on 9781 degrees of freedom
## Multiple R-squared: 0.4355, Adjusted R-squared: 0.4355
## F-statistic: 7547 on 1 and 9781 DF, p-value: < 2.2e-16
rm(model,p3) #brisanje varijabli
Sada nakon rezultata vidimo da nam je linearan model jako kvalitetan. To najviše vidimo po R2 koeficijentu koji iznosi 0.43 što govori da je 43% odstupanja zavisne varijable protumačeno modelom. Što povlači da smo našli koeficijent korelacije od 0.65 (srednje jaka pozitivna korelacija), također na ovoliko veliki uzorak testiranje signifikantnosti koeficijenta korelacije će vratiti signifikantan rezultat.
Iz vodećeg koeficijenata pravca zaključujemo da se svakim dodatnim kvadratom cijena stana poveća u prosjeku za 2856 €, dok na pitanje o početnoj vrijednosti stana ne možemo dati neki konkretan odgovor. Naime naša početna vrijednost stana je ispala 5241€ uz to da nam p-vrijednost iznosi 0.0911 što komentiramo kao: “uz razinu značajnosti od 10% (p<0.1) prihvaćamo da postoji početna cijena stana (odnosno koeficijent nam nije 0, no ako nam je tolerancija na grešku manja od 10% kao npr. 5% (0.05<p) ne možemo onda ponoviti isti zaključak i postoji mogućnost da nam je koeficijent neznačajno malen”. (Koristio se dvosmjerni test značajnosti regresorske varijable)
U suštini na naše pitanje o početnoj vrijednosti stana nažalost ne možemo garantirati nikakav siguran odgovor, no odgovor “DA” je vjerojatniji nego odgovor “NE”.
U ovome dijelu želimo odgovoriti na pitanje: “Kako se kreću cijene kvadrata kroz vrijeme i koliko dobro to možemo modelirati”. Također ćemo sastaviti bazni index cjena za zadnjih godinu dana.
B=1 #B je baza koju uzimamo za bazni index (1=4/2022 dok je 12=3/2023)
#definiram vektore za spremanje
cjene = c()
velicina = c()
mjesec = c()
#za cjene iz 2022
filter=subset(podaci, year(podaci$datumi)==2022)
for(i in 4:12){
mjesec = append(mjesec,paste(as.numeric(i),"/","2022",sep="",collapse=NULL))
filter2=subset(filter,month(filter$datumi)==i)
velicina=append(velicina,length(filter2$kvadrat))
cjene = append(cjene,mean(filter2$kvadrat))
}
# za cjene iz 2023
filter=subset(podaci, year(podaci$datumi)==2023)
for(i in 1:3){
mjesec = append(mjesec,paste(as.numeric(i),"/","2023",sep="",collapse=NULL))
filter2=subset(filter,month(filter$datumi)==i)
velicina=append(velicina,length(filter2$kvadrat))
cjene = append(cjene,mean(filter2$kvadrat))
}
#racunam indekse
cjeneB=(cjene/cjene[B])*100
#kreiram tablicu
tablica=data.frame(cjene,cjeneB,velicina,mjesec)
Q=tablica #za tablicu
#samo misece probacijen u tip datuma
tablica$mjesec <- as.Date(paste0("01/", tablica$mjesec), format = "%d/%m/%Y")
# Definiram index kao graf
index <- ggplot(tablica, aes(x=mjesec, y=cjene)) +
geom_line(size = 1.5, color = "red") +
geom_point(color = "black") +
geom_smooth(method = "lm", se = TRUE, level=0.99)+
scale_y_continuous(breaks = seq(2800,3500,100)) +
scale_x_date(date_breaks = "2 months") +
ylab("Cijena kvadrata u €") +
xlab("") +
ggtitle("Cijene stanova dataseta po datumu") +
theme(axis.text = element_text(size = 10),
axis.title = element_text(size = 15),
axis.title.y = element_text(margin = margin(t = 0, r = 20, b = 0, l = 0)),
axis.title.x = element_text(margin = margin(t = 20, r = 0, b = 0, l = 0)),
plot.title = element_text(size = 20, face = "bold", hjust = 0.5,
margin = margin(t = 0, r = 0, b = 20, l = 0)),
strip.background = element_rect(colour = "black", fill = "white"),
strip.text = element_text(face = "bold", size = 16))
theme_linedraw()
index #prikaz grfa
Iz grafa prosječnih cijena po mjesecu čitamo da bi linearan model opet mogao zadovoljiti naše potrebe modeliranja (na kratak rok !).
Iako “logički” eksponencijalni model ima više smisla za ovaj slučaj jer: “vrijednost novca opada eksponencijalno (prosječna inflacija je 2-3% godišnje) što utječe da vrijednost stana ( kojemu je stvarna vrijednost fiksna ) mjereći u FIAT valuti raste eksponencijalno”.
Naša opravdanja korištenja linearnog modela su:
1. Svaka funkcija se lokalno može proizvoljno dobro aproksimirati, a eksponencijalne funkcije koje imaju koeficijent manji od 0.02 u eksponent uz x prate jako blizu linearnu funkciju za prvih 10-etak članova. Odnosno ex*0.02 ≈ 1.02x ≈ 1+x*0.02 (uz uvjet x ≤10 )
2. Uz znanje da je porast između prvog i zadnjeg podatka oko 15% odnosno mjesečni porast je oko 1.25% zadovoljavamo uvjete naše prve točke i uz varijabilnost podataka koju smo dobili preciznost nam ne treba biti prioritet jer niti ne možemo napraviti nešto bolje od “grube aproksimacije”
#koef korelacije
paste("Koeficjent koorelacije je:",as.character(cor(cjene,c(1:12))))
## [1] "Koeficjent koorelacije je: 0.81160872719586"
cor.test(cjene,c(1:12))
##
## Pearson's product-moment correlation
##
## data: cjene and c(1:12)
## t = 4.3932, df = 10, p-value = 0.001349
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.4449640 0.9452353
## sample estimates:
## cor
## 0.8116087
#moja regresija
model <- lm(cjene ~ c(1:12), data = tablica)
summary(model)
##
## Call:
## lm(formula = cjene ~ c(1:12), data = tablica)
##
## Residuals:
## Min 1Q Median 3Q Max
## -173.406 -41.264 -7.016 24.660 206.143
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2728.713 62.109 43.934 8.97e-13 ***
## c(1:12) 37.075 8.439 4.393 0.00135 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 100.9 on 10 degrees of freedom
## Multiple R-squared: 0.6587, Adjusted R-squared: 0.6246
## F-statistic: 19.3 on 1 and 10 DF, p-value: 0.001349
Q #prikaz tablice podataka
## cjene cjeneB velicina mjesec
## 1 2882.174 100.00000 28 4/2022
## 2 2811.406 97.54463 102 5/2022
## 3 2842.811 98.63426 81 6/2022
## 4 2860.103 99.23421 63 7/2022
## 5 2954.888 102.52286 49 8/2022
## 6 2920.485 101.32924 1732 9/2022
## 7 2814.828 97.66336 452 10/2022
## 8 2952.276 102.43226 4463 11/2022
## 9 3044.397 105.62850 968 12/2022
## 10 3017.434 104.69298 1266 1/2023
## 11 3155.811 109.49411 90 2/2023
## 12 3379.749 117.26388 17 3/2023
#rjesavanje varijabli
rm(B,cjeneB,cjene,i,mjesec,velicina,filter,filter2,index,model,tablica,Q)
Nakon provlačenja modela kroz naše podatke kao i obično prvo nas zanimaju koeficijent korelacije i R2.Iz koeficijenta korelacije i njegovog pripadnog testa signifikantnosti zaključujemo da postoji snažna pozitivna korelacija između vremena i prosječne cijene kvadrata stana. Nadalje iz korigiranog R2 koji je 0.60 zaključujemo da nam je model “kvalitetan” (interpretacija korigiranog R2 je ista kao i za obični samo što prirodno R2 ima tendenciju biti veći kako nam je uzorak manji pa bi ga se trebalo korigirati).
Nakon što smo stekli povjerenje u naš model krećemo s komentiranjem modela i dobivenih rezultata. Iz vodećeg koeficijenta pravca saznajemo da se u prosjeku mjesečno cijene kvadrata povećavaju za 36€.
U četvrtom mjesecu 2023. očekujemo prosječnu cijenu da će se nalaziti negdje oko 2743+13*36=3211€ sa standardnom devijacijom od 101€.
U ovom dijelu analize bavimo se analizom opisa u oglasima tj. specifično testiranje korelacije između broja riječi u opisu i cijene stanova te promatranje utječu li određene riječi u opisu na cijenu stanova.
Prvo krećemo s analizom broja riječi u oglasu. Promatranjem opisa došli smo na ideju da postoji pozitivna korelacija između broja riječi u opisu i cijene po m2. Imamo dvije glavne motivacije za takvo razmišljanje. Prva motivacija je ta da će vlasnik uređenijeg (skupljeg) stana će imati više “dobrog materijala” za napisati u opis dok vlasnik manje uređenog (jeftinijeg) stana neće imati toliko “dobrog materijala” za staviti u opis. Druga motivacija nam je da ako se vlasnik oglasa potrudio napisati veliki opis onda će se potruditi više oko prodaje nekretnine tj. pokušat će ga prodati po većoj cijeni od vlasnika oglasa koji je napisao manji oglas.
X3_3_Puni_opis = podaci
options(scipen=0)
# Stvaranje novog stupca gdje ce pisati broj rijeci u oglasu za svaki opis
X3_3_Puni_opis$br_rijeci = NA
opis=X3_3_Puni_opis$opis
for (x in 1:length(podaci$naslov)) {
my_string <- opis[x]
X3_3_Puni_opis$br_rijeci[x] <- length(strsplit(as.character(my_string), "\\w+")[[1]])
}
rm(x,my_string)
# Prikaz korelacije
p1<-ggplot(X3_3_Puni_opis, aes(y = kvadrat, x = br_rijeci )) +
geom_point(shape=18, color="deepskyblue3")+
geom_smooth(method=lm, se=FALSE,
color="black") +
ylab("Cijena po m2") +
xlab("Broj riječi u oglasu") +
ggtitle("Utjecaj broja riječi na cijenu kvadrata stana") +
coord_cartesian(xlim = c(0,600), ylim = c(0,7500)) +
theme(axis.text = element_text(size = 10),
axis.title = element_text(size = 15, face = "bold"),
axis.title.y = element_text(margin = margin(t = 0, r = 20, b = 0, l = 0)),
axis.title.x = element_text(margin = margin(t = 20, r = 0, b = 0, l = 0)),
plot.title = element_text(size = 20, face = "bold", hjust = 0.5,
margin = margin(t = 0, r = 0, b = 20, l = 0)),
strip.background = element_rect(colour = "black", fill = "white"),
strip.text = element_text(face = "bold", size = 16))
p1
rm(p1)
# Linearna regresija za analizu
summary(lm(kvadrat~ br_rijeci, X3_3_Puni_opis))
##
## Call:
## lm(formula = kvadrat ~ br_rijeci, data = X3_3_Puni_opis)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2588.9 -760.5 -204.9 490.5 9623.7
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.581e+03 1.904e+01 135.55 <2e-16 ***
## br_rijeci 2.061e+00 8.959e-02 23.01 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1146 on 9781 degrees of freedom
## Multiple R-squared: 0.05134, Adjusted R-squared: 0.05124
## F-statistic: 529.4 on 1 and 9781 DF, p-value: < 2.2e-16
rm(filtrirani_podaci)
Nakon provođenja programa dobivamo da korelacija uzorka iznosi 0.2268 te da nam je R2=0.04945. Iz grafa i dobivene korelacije možemo naslutiti da je korelacija značajna i veća od 0, no to ipak moramo testirati kako bi bili sigurniji. Za provjeru koristit ćemo se testom o značajnosti Pearsonog koeficijenta korelacije.
# Test znacajnosti korelacije
cor.test(X3_3_Puni_opis$br_rijeci, X3_3_Puni_opis$kvadrat, alternative = "gr")
##
## Pearson's product-moment correlation
##
## data: X3_3_Puni_opis$br_rijeci and X3_3_Puni_opis$kvadrat
## t = 23.008, df = 9781, p-value < 2.2e-16
## alternative hypothesis: true correlation is greater than 0
## 95 percent confidence interval:
## 0.2107509 1.0000000
## sample estimates:
## cor
## 0.2265877
Iz provedenog testa vidimo da nam je p-vrijednost daleko manja od 0.05 te uz razinu značajnosti od 5% odbacujemo nultu hipotezu da nam je prava korelacija manja ili jednaka 0. Iz testa još vidimo da nam donja granica, 95%-tnog intervala, iznosi 0.2110, a gornja 1 što u prijevodu znači da s 95% sigurnošću možemo reći da nam se prava korelacija nalazi između 0.2110 i 1. Još jedna od bitnih stvari za komentirati je rezultat R2. U našem slučaju R2 iznosi 0.04945 što znači da je manje od 5% odstupanja zavisne varijable protumačeno modelom. Iz toga bi mogli zaključiti da je naš model jako “loš” (što je i očekivano jer bi bilo apsurdno da možemo modelom predvidjeti cijenu iz informacije o broju riječi u oglasu), no ne smijemo zaboraviti da mi uopće nismo pokušavali napraviti model već samo vidjeti postoji li ikakva korelacija između broja rijeci i cijene po m2.
Za kraj, na hipotezu o tome postoji li korelaciji između broja rijeci i cijene po m2, kao i u svakoj hipotezi iz ekonomije, ne možemo dati 100%-tni da, ali možemo reći da vrlo vjerojatno postoji slaba korelacija između te dvije varijable.
Nakon analize broja riječi u opisima krećemo s analizom određenih riječi. U ovom dijelu rada promatramo postoji li razlika u cijenama kvadrata stanova između oglasa koji sadrže određene riječi u svojim opisima (npr. more, terasa) te oglasima koji ne sadrži te riječi. Motivaciju ćemo naći u primjeru za riječ more. Stanovi koji su blizu mora će vrlo vjerojatno spomenuti u opisu da se nalazu blizu mora, dok stanovi koji se ne nalaze blizu mora neće uopće spominjati riječ more u svojim opisima i očekujemo da će stanovi blizu mora biti skuplji u odnosu na ostale.
U donjem dijelu koda smo napravili tablicu frekvencije rijeci kako bi nam pomoglo u odluci koje rijeci ćemo promatrati.
#Novi vektor gdje ce se nalaziti sve rijeci iz svih opisa
v = character()
for (y in 1:length(podaci$naslov)) {
a=strsplit(str_squish(gsub("[^[:alpha:]]"," ",opis[y]))," ")
v=c(v,a)
}
rm(y,a)
# Stvaranje Corpusa
text_podaci<-Corpus(VectorSource(v))
rm(v)
# Čišćenje Corpusa
text_1<-tm_map(text_podaci, removeNumbers)
text_1<-tm_map(text_podaci, removePunctuation)
rm(text_podaci)
# Stvaranje matrice za analizu
dtm<- TermDocumentMatrix(text_1)
m<-as.matrix(dtm)
k<-sort(rowSums(m), decreasing = TRUE)
word_freq <- data.frame(word = names(k), frequency = k, row.names = NULL)
kable(word_freq[1:25,]) %>% kable_styling(full_width = FALSE,
position = "center", font_size = 12)
| word | frequency |
|---|---|
| stan | 22331 |
| 11150 | |
| protected | 11061 |
| kod | 9768 |
| 9305 | |
| www | 9015 |
| nalazi | 8939 |
| sobe | 8932 |
| agencije | 8795 |
| tel | 8127 |
| sastoji | 8116 |
| nekretnine | 7678 |
| spavaće | 7029 |
| zgrade | 6372 |
| površine | 6346 |
| ima | 6232 |
| dnevnog | 5861 |
| boravka | 5680 |
| katu | 5356 |
| dvije | 5327 |
| stana | 5133 |
| kupaonice | 5109 |
| kuhinje | 5107 |
| dux | 4408 |
| će | 4351 |
Pomoću tablice odlučili smo se da ćemo promatrati 4 rijeci:
more, parking, prizemlje i terasa.
Donji dio koda prolazi kroz sve opise u svim oglasima te traži spominje li se odabrana riječ u opisu. Zbog padeža u hrvatskom jeziku ne možemo samo staviti da nam traži odabranu riječ u nominativu pa smo pomoću regularnih izraza sastavili kod takav da nam traži sve rijeci koje kreću s korijenom te rijeci te “pokupili” sve padeže te rijeci.
#stavranje stupaca
X3_3_Puni_opis$more = NA
X3_3_Puni_opis$parkirno = NA
X3_3_Puni_opis$prizemlje = NA
X3_3_Puni_opis$terasa = NA
#stvaranje vektora gdje dijelim na oglase s odredenom rijeci i bez te rijeci
da_more = vector()
ne_more = vector()
da_parking = vector()
ne_parking = vector()
da_prizemlje = vector()
ne_prizemlje = vector()
da_terasa = vector()
ne_terasa = vector()
for (i in 1:length(podaci$naslov)) {
string_opis = opis[i]
string_opis = tolower(string_opis)
if (grepl("\\bmor[[:alpha:]]\\b",string_opis)) {
X3_3_Puni_opis$more[i] = 1
da_more=c(da_more,X3_3_Puni_opis$kvadrat[i])
} else {
X3_3_Puni_opis$more[i] = 0
ne_more=c(ne_more,X3_3_Puni_opis$kvadrat[i])
}
if (grepl("\\bparkir[[:alpha:]]*\\b",string_opis)) {
X3_3_Puni_opis$parkirno[i] = 1
da_parking=c(da_parking,X3_3_Puni_opis$kvadrat[i])
} else {
X3_3_Puni_opis$parkirno[i] = 0
ne_parking=c(ne_parking,X3_3_Puni_opis$kvadrat[i])
}
if (grepl("\\bprizem[[:alpha:]]*\\b",string_opis)) {
X3_3_Puni_opis$prizemlje[i] = 1
da_prizemlje=c(da_prizemlje,X3_3_Puni_opis$kvadrat[i])
} else {
X3_3_Puni_opis$prizemlje[i] = 0
ne_prizemlje=c(ne_prizemlje,X3_3_Puni_opis$kvadrat[i])
}
if (grepl("\\bteras[[:alpha:]]*\\b",string_opis)) {
X3_3_Puni_opis$terasa[i] = 1
da_terasa=c(da_terasa,X3_3_Puni_opis$kvadrat[i])
} else {
X3_3_Puni_opis$terasa[i] = 0
ne_terasa=c(ne_terasa,X3_3_Puni_opis$kvadrat[i])
}
}
rm(i,string_opis,opis)
df.1 <- X3_3_Puni_opis %>%
mutate(more_1 = case_when(more == "1" ~ "Stan je blizu mora",
more == "0" ~ "Stan nije blizu mora")) %>%
mutate(prizemlje_1 = case_when(prizemlje == "1" ~ "Stan je u prizemlju",
prizemlje == "0" ~ "Stan nije u prizemlju")) %>%
mutate(parkirno_1 = case_when(parkirno == "1" ~ "Stan ima parking",
parkirno == "0" ~ "Stan nema parking")) %>%
mutate(terasa_1 = case_when(terasa == "1" ~ "Stan ima terasu",
terasa == "0" ~ "Stan nema terasu"))
Nakon filtriranje podataka možemo krenuti na testiranje razlike sredina i stvaranje grafova
p4<-ggplot(df.1, aes(y = cijena, x = kvadratura )) +
geom_point(shape=18, color="deepskyblue3")+
geom_smooth(method=lm, se=FALSE,
color="black") +
facet_grid(~more_1) +
ylab("Cijena stana") +
xlab("Kvadratura") +
ggtitle("Cijena po m2") +
coord_cartesian(xlim = c(0,300), ylim = c(0,1000000)) +
theme(axis.text = element_text(size = 16),
axis.title = element_text(size = 20, face = "bold"),
axis.title.y = element_text(margin = margin(t = 0, r = 20, b = 0, l = 0)),
axis.title.x = element_text(margin = margin(t = 20, r = 0, b = 0, l = 0)),
plot.title = element_text(size = 30, face = "bold", hjust = 0.5,
margin = margin(t = 0, r = 0, b = 20, l = 0)),
strip.background = element_rect(colour = "black", fill = "white"),
strip.text = element_text(face = "bold", size = 16))
p4
rm(p4)
#test razlike sredina kod rijeci more
t.test(da_more, ne_more)
##
## Welch Two Sample t-test
##
## data: da_more and ne_more
## t = 30.973, df = 7228.5, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 693.1687 786.8391
## sample estimates:
## mean of x mean of y
## 3349.537 2609.533
Iz scatter plota i linearne regresije se može naslutiti da bi prosječna cijena kvadrata stanova blizu mora trebala biti veća od stanova koji nisu blizu mora. Ta tvrdnja se testira testom o razlici sredina. Testove za sve rijeci smo obavili na razini značajnosti od 5%. Nakon provođenje testa iz dobivene p-vrijednosti od 2.2*10^-16 možemo odbaciti nultu hipotezu da ne postoji razlika između prosječne cijene kvadrata te iz 95%-tnog intervala signifikantnosti zaključujemo da su stanovi koji su blizu mora skuplji oko 693.11-786.75€ po kvadratu od stanova koji nisu blizu mora.
p5<-ggplot(df.1, aes(y = cijena, x = kvadratura )) +
geom_point(shape=18, color="darkgreen")+
geom_smooth(method=lm, se=FALSE,
color="black") +
facet_grid(~parkirno_1) +
ylab("Cijena stana") +
xlab("Kvadratura") +
ggtitle("Cijena po m2") +
coord_cartesian(xlim = c(0,300), ylim = c(0,1000000)) +
theme(axis.text = element_text(size = 16),
axis.title = element_text(size = 20, face = "bold"),
axis.title.y = element_text(margin = margin(t = 0, r = 20, b = 0, l = 0)),
axis.title.x = element_text(margin = margin(t = 20, r = 0, b = 0, l = 0)),
plot.title = element_text(size = 30, face = "bold", hjust = 0.5,
margin = margin(t = 0, r = 0, b = 20, l = 0)),
strip.background = element_rect(colour = "black", fill = "white"),
strip.text = element_text(face = "bold", size = 16))
p5
rm(p5)
#test razlike sredina kod rijeci parkirno
t.test(da_parking, ne_parking)
##
## Welch Two Sample t-test
##
## data: da_parking and ne_parking
## t = 17.18, df = 9753.7, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 356.7970 448.7056
## sample estimates:
## mean of x mean of y
## 3136.052 2733.301
Analogno kao i za more iz scatter plota i linearne regresija se vidi da bi stanovi s parkingom trebali imati skuplji prosjecni kvadrat od stanova koji nemaju parking. Iz provedenog testa o razlici sredina zakljucujemo da postoji znacajna razlika izmedu prosjecih kvadrata te iz 95%-tnog intervala signifikantnosti zakljucujemo da u prosjeku kvadrat stana s parkirnom je skuplji za oko 355.98-447.84€ od stana bez parkiga.
p6<-ggplot(df.1, aes(y = cijena, x = kvadratura )) +
geom_point(shape=18, color="firebrick")+
geom_smooth(method=lm, se=FALSE,
color="black") +
facet_grid(~prizemlje_1) +
ylab("Cijena stana") +
xlab("Kvadratura") +
ggtitle("Cijena po m2") +
coord_cartesian(xlim = c(0,300), ylim = c(0,1000000)) +
theme(axis.text = element_text(size = 16),
axis.title = element_text(size = 20, face = "bold"),
axis.title.y = element_text(margin = margin(t = 0, r = 20, b = 0, l = 0)),
axis.title.x = element_text(margin = margin(t = 20, r = 0, b = 0, l = 0)),
plot.title = element_text(size = 30, face = "bold", hjust = 0.5,
margin = margin(t = 0, r = 0, b = 20, l = 0)),
strip.background = element_rect(colour = "black", fill = "white"),
strip.text = element_text(face = "bold", size = 16))
p6
rm(p6)
#test razlike sredina kod rijeci prizemlje
t.test(da_prizemlje, ne_prizemlje)
##
## Welch Two Sample t-test
##
## data: da_prizemlje and ne_prizemlje
## t = 6.4135, df = 6114.3, p-value = 1.528e-10
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 112.7600 212.0367
## sample estimates:
## mean of x mean of y
## 3040.179 2877.781
U slučaju prizemlja, vizualno je puno teze uočiti razliku u prosječnoj cijeni kvadrata između stanova koji se nalazu u prizemlju i koji se ne nalazu u prizemlju nego kod primjera za more i parking. Iz provedenog testa dobivamo da postoji značajna razlika te iz intervala signifikantnosti zaključujemo da se ta razlika nalazi između 112.05-211.27€.
p7<-ggplot(df.1, aes(y = cijena, x = kvadratura )) +
geom_point(shape=18, color="darkturquoise")+
geom_smooth(method=lm, se=FALSE,
color="black") +
facet_grid(~terasa_1) +
ylab("Cijena stana") +
xlab("Kvadratura") +
ggtitle("Cijena po m2") +
coord_cartesian(xlim = c(0,300), ylim = c(0,1000000)) +
theme(axis.text = element_text(size = 16),
axis.title = element_text(size = 20, face = "bold"),
axis.title.y = element_text(margin = margin(t = 0, r = 20, b = 0, l = 0)),
axis.title.x = element_text(margin = margin(t = 20, r = 0, b = 0, l = 0)),
plot.title = element_text(size = 30, face = "bold", hjust = 0.5,
margin = margin(t = 0, r = 0, b = 20, l = 0)),
strip.background = element_rect(colour = "black", fill = "white"),
strip.text = element_text(face = "bold", size = 16))
p7
rm(p7)
#test razlike sredina kod rijeci parkirno
t.test(da_terasa, ne_terasa)
##
## Welch Two Sample t-test
##
## data: da_terasa and ne_terasa
## t = 22.935, df = 7499.2, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 510.8538 606.3419
## sample estimates:
## mean of x mean of y
## 3257.268 2698.670
rm(list = ls.str(mode = 'numeric'))
Za terasu dobivamo ocekivanu vizualnu razliku izmedu grafova te pomocu testa dobivamo da stvarno postoji znacajna razlika u prosjecnim cijenama kvadrata izmedu stanova s terasom i bez terase. Iz intervala signifikantnosti dobivamo da u prosjeku stanovi s terasom su skuplji za oko 510.71-606.14€ po kvadratu od stanova bez terase.
Pomoću donjeg dijela koda dobivamo koeficijente binarne regresije (yi = β0 + β1*xi + β2*Di) gdje yi predstavlja ukupnu cijenu stana, xi veličinu stana (broj kvadrata) te Di je binarna varijabla koja iznosi 1 ako se spominje određena riječ u opisu, a 0 ako se ta riječ ne spominje u opisu.
m3<-lm(cijena~kvadratura + more,df.1)
m4<-lm(cijena~kvadratura + prizemlje,df.1)
m5<-lm(cijena~kvadratura + terasa,df.1)
m6<-lm(cijena~kvadratura + parkirno,df.1)
stargazer(list(m3,m4,m5,m6), type = "text")
##
## =========================================================================================
## Dependent variable:
## ---------------------------------------------------------
## cijena
## (1) (2) (3) (4)
## -----------------------------------------------------------------------------------------
## kvadratura 2,770.899*** 2,851.464*** 2,716.861*** 2,833.327***
## (31.753) (32.854) (32.708) (32.579)
##
## more 73,465.160***
## (2,593.579)
##
## prizemlje 14,172.160***
## (2,861.979)
##
## terasa 59,325.000***
## (2,688.215)
##
## parkirno 37,852.200***
## (2,637.090)
##
## Constant -19,148.360*** 1,224.086 -7,284.433** -11,150.900***
## (3,106.202) (3,206.230) (3,082.608) (3,278.122)
##
## -----------------------------------------------------------------------------------------
## Observations 9,783 9,783 9,783 9,783
## R2 0.478 0.437 0.462 0.447
## Adjusted R2 0.478 0.437 0.462 0.447
## Residual Std. Error (df = 9780) 126,483.100 131,404.500 128,410.700 130,204.800
## F Statistic (df = 2; 9780) 4,483.714*** 3,794.723*** 4,204.399*** 3,955.502***
## =========================================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
rm(m3,m4,m5,m6,df.1)
Iz koeficijenata uz Di varijablu možemo zaključiti sljedeće tvrdnje.
U prosjeku:
Stanovi blizu mora su skuplji za 73428.77€ od stanova udaljenih od mora.
Stanovi u prizemlju su skuplji za 14122.73€ od stanova koji nisu u prizemlju.
Stanovi s terasom su skuplji za 59277.38€ od stanova bez terase.
Stanovi s parkingom su skuplji za 37783.22€ od stanova bez parkinga.